/*
脚本作者：mieqq
引用地址：https://raw.githubusercontent.com/mieqq/mieqq/master/replace-body.js

用Loon的脚本实现Quantumult X的response-body和request-body重写类型

如Quantumult X的重写：
https://service.ilovepdf.com/v1/user url response-body false response-body true
   
可改写为Loon的脚本复写：
[Script] 
http-response https://service.ilovepdf.com/v1/user requires-body=true, script-path = https://gitlab.com/lodepuly/vpn_tool/-/raw/main/Resource/Script/CommonScript/replace-body.js, argument = false->true

argument=要匹配值=作为替换的值
支持正则：如argument=\w+->test
支持正则修饰符：如argument=/\w+/g->test
支持多参数，如：argument=匹配值1->替换值1&匹配值2->替换值2

支持改写响应体和请求体体[type=http-response或http-request]注意必须打开需要body[requires-body = true]

提示：
修改json格式的键值对可以这样：
argument=("key")\s?:\s?"(.+?)"->$1: "new_value"

s修饰符可以让.匹配换行符，如argument=/.+/s->hello
  
*/

function getRegexp(re_str) {
  let regParts = re_str.match(/^\/(.*?)\/([gims]*)$/)
  if (regParts) {
    return new RegExp(regParts[1], regParts[2])
  } else {
    return new RegExp(re_str)
  }
}

let body
if (typeof $argument == 'undefined') {
  console.log('requires $argument')
} else {
  if (typeof $response != 'undefined') {
    body = $response.body
  } else if (typeof $request != 'undefined') {
    body = $request.body
  } else {
    console.log('script type error')
  }
}

let argument = $argument ?? ''
if (body) {
  try {
    argument = decodeURIComponent(argument)
  } catch (e) {}
  console.log('argument')
  console.log(argument)
  argument.split('&').forEach(item => {
    let [match, replace] = item.split('->')
    console.log('match')
    console.log(match)
    console.log('replace')
    console.log(replace)
    let re = getRegexp(match)
    body = body.replace(re, replace)
  })
  // console.log('body')
  // console.log(body)
  $done({ body })
} else {
  console.log('Not Modify')
  $done({})
}
